package com.example.couponservice.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.couponservice.domain.dto.CouponDto;
import com.example.couponservice.domain.entity.Coupon;
import com.example.couponservice.domain.vo.couponOrderVo;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 优惠券服务接口
 * 定义优惠券核心业务操作契约
 * 继承自MyBatis-Plus的IService，具备基础CRUD能力
 *
 * @author czwa
 */
public interface ICouponService extends IService<Coupon> {

    /**
     * 向用户账户添加优惠券
     *
     * @param id 优惠券ID
     * @throws RuntimeException 当优惠券已被领完或用户重复领取时抛出
     */
    void addCouponToUser(Integer id);

    /**
     * 创建优惠券订单
     * 包含库存扣减和用户优惠券发放逻辑
     *
     * @param couponOrderVo 优惠券订单视图对象，包含订单相关信息
     * @throws RuntimeException 当库存不足时抛出
     */
    void createCouponOrder(couponOrderVo couponOrderVo);

    /**
     * 获取所有可用优惠券
     *
     * @param now 当前时间，用于判断优惠券是否在有效期内
     * @param currentId 当前用户ID，用于判断用户是否已领取该优惠券
     * @return 可用优惠券列表，已转换为DTO对象
     */
    List<CouponDto> getAllCoupon(LocalDateTime now, Integer currentId);
}